Overview
This notebook contains a summary of results obtained from the analysis of capture-mark-recapture (CMR) data from mountain yellow-legged frog populations in California’s Sierra Nevada. These data are collected by the Mountain Lakes Research Group, usually on an annual basis. The intent of this notebook is to provide a single file where researchers and managers can obtain information about the current status of these populations, many of which are critically important for the recovery of this species. Data from visual encounter surveys are also included in the summary to augment the results from CMR surveys. This information is updated annually as data from the most recent summer field season is analyzed.
In the following summary, populations are categorized as “Donor populations”, “Translocated populations”, and “Reintroduced populations”, and within these categories populations are identified by their five-digit site id. Unless otherwise noted, frogs in all populations are infected with the amphibian chytrid fungus, Batrachochytrium dendrobatidis (Bd). Unlike the severe effects caused by Bd following its initial arrival in these populations, usually decades ago, many of these populations are now co-existing with Bd. The reasons for this changed dynamic are under study, and appear to involve evolutionary changes in frogs that have made them less susceptible to chytridiomycosis, the disease caused by Bd.
Donor populations
Translocated populations
70134
Survival
- Very low 1-year survival of the 2006 cohort of translocated frogs (0.12). Only six adults seen in 2007 and none thereafter.
- T. elegans never seen at site, so likely not responsible for low survival.
Reproduction
- No evidence of reproduction was ever seen.

70370
Survival
- Very low 1-year survival of both the 2016 and 2018 translocated cohorts (0.04 and 0.17, respectively).
- Habitat looks very good for R. sierrae for both summer and winter, so it remains unclear what the factor limiting frog survival at this site is. It is unlikely related to winter oxygen levels in the water because trout thrived here for decades.
Reproduction
- No evidence of reproduction was ever observed.
Population size
- Population size returned to near-zero within one year of each translocation.
- The absence of any frogs during the 2020 survey suggests that the population is extirpated.

70413
Survival
- Relatively high 1-year survival of the 2013, 2015, and 2017 cohorts of translocated frogs (0.69, 0.64, 0.56, respectively).
Reproduction
- Egg masses, tadpoles, and/or subadults have been observed annually starting in 2014, with a maximum count summed across all sites of 800 in 2015.
- Subadults were first observed in 2015 and are always seen in relatively low numbers (maximum count = 27).
Recruitment
- Recruitment of new adults was first observed in 2016, and has occurred in all years since.
- Number of new recruits seems quite regular, with 20, 15, and 24 recruits tagged in 2018, 2020, and 2021, respectively.
Population size
- From 2017 to early-2021 (i.e., prior to translocation and reintroduction of 117 frogs), estimated population size across all sites was stable at approximately 50 adults in each year.
- This population, although still relatively small given the abundant high quality habitat, appears well-established and self-sustaining.
- The 2021 translocation and reintroduction is likely to substantially increase the population size.

70414
Survival
- Very low 1-year survival of the 2006 cohort of translocated frogs (0.01), and no adults seen in 2007.
- Number of T. elegans appeared to increase markedly following translocation, may have been at least partially responsible for low survival.
Reproduction
- No evidence of reproduction was ever seen.

70449
Survival
- Intermediate level of survival of the 2014 cohort of translocated frogs (0.35).
- Survival of the 2017 cohort of translocated frogs was somewhat higher (0.53).
- More frogs found dead at this site than is typically the case at other sites. Whether this is due to site characteristics (e.g., lack of hiding cover) that make carcasses easier to detect, or population characteristics (i.e., relatively low survival) is unknown.
- Adult frogs at this site commonly feed on HYRE tadpoles and subadults and are very well-fed. It would be interesting to know whether these frogs grow quickly but have short life spans compared to frogs at higher elevations.
Reproduction
- Egg masses, tadpoles, and/or subadults have been observed annually since 2015, but always in relatively small numbers (maximum count = 80 tadpoles).
- The relatively low numbers are likely due to high habitat complexity and the fact that at this elevation tadpoles often do not aggregrate near shore.
Recruitment
- Recruitment of new adults has occurred in most years since 2016, with a maximum number of 15 in 2016.
- Substantial recruitment occurred in 2016, just two years after the first translocation. This indicates that at this relatively low elevation site, the transition from egg to adult can occur in only 1.5 years.
- Recruitment does not appear to be particularly episodic, in contrast to what is observed at some other sites.
Population size
- Population appears to have stabilized at 20-25 adults. Although smaller than hoped for, this may be a typical population size at this elevation due to predation from snakes and invertebrate predators.

70505
Survival
- Low 1-year survival of the 2008, 2013, 2015, and 2017 cohorts of translocated frogs (0.19, 0.16, 0.10, 0.10).
Reproduction
- Tadpoles and/or subadults seen in every year starting in 2010.
- Counts of these life stages are generally low (< 25), but the 200 tadpoles counted in 2018 were an obvious exception.
Recruitment
- First new recruits into the adult population were observed in 2012.
- Some recruitment of new adults occurred in most years, including 12-17 recruits per year in 2013, 2014, and 2015.
Population size
- Estimated population size in the last survey year (2018) was approximately 6 adults.
- This small population size is likely due to survival of adults being low enough to preclude population growth, even with 4 translocations and natural recruitment of adults in several years.
- Available evidence suggests that, at best, this site will support only a small frog population, and conducting additional translocations will likely not alter that outcome.

70550
Survival
- Relatively high 1-year survival of the 2006 cohort of translocated frogs (0.61).
- Survival of 2013 cohort of translocated frogs was substantially lower (0.29).
Reproduction
- Tadpoles and subadults were first observed in 2008.
- Both life stages were observed in all subsequent surveys (2008-2021), and in much higher numbers than in any other translocated population.
- Since 2016, tadpole counts from visual encounter surveys have often exceeded 1500 individuals.
Recruitment
- The first recruit into the adult population was observed in 2010, and except for 2011, new recruits have been tagged in every subsequent year (2010, 2012-2021).
- Recruitment magnitude is highly variable between years, with notably large recruitment events in 2016 and 2021, and lower but substantial recruitment in several additional years (2013, 2014, 2018, 2020).
- This variation may result from an interaction between subadult survival, Bd infection, and winter severity.
Population size
- Following the original translocation in 2006, the estimated population was < 50 adults until 2013. During 2013-2015, the population increased to 100-150 adults. Since the large recruitment event in 2016, the population has fluctuated between 170 and 420 adults, with an average population size of approximately 250 adults.
- This population is now well-established, and is large enough to serve as a donor of frogs for future frog recovery actions.
- The 16-year mark-recapture dataset has allowed unprecedented insights into the dynamics of population establishment. It is also allowing us to test hypotheses regarding the drivers of the observed population dynamics, information that is critical for the design and implementation of future frog recovery actions.

70556
Survival
- Relatively high 1-year survival of the 2018 cohort of translocated frogs (0.73).
- Survival of 2020 cohort of translocated frogs was lower, but still high (0.61).
- Not as high as 74976 despite both sites receiving frogs from same donor population and in the same two years.
Reproduction
- Successful reproduction occurred in 2019 (based on 2nd-year tads seen in 2020), 2020 (1st-year tads), and 2021 (1st-year tads).
- 2019 cohort was not seen until 2020 (07-07) and was made up of only ~15 tadpoles. Suggests limited reproduction in 2019 and/or low survival during 2019-2020 winter.
- 2020 cohort contained at least 425 individuals, based on count conducted on 08-23. Tadpole count on 2021-07-22 indicated 350 second-year animals, suggesting high overwinter survival of first-year tadpoles compared to that shown by 2019 cohort (perhaps due to light 2020 snow year –> long 2020 summer –> large tadpole size going into 2021 winter).
- 2021 cohort contained approximately 435 individuals, based on count conducted on 2021-08-26.
- First metamorphs seen in 2021 (1 on 07-22 and 13 on 08-26), small numbers likely due to small size of the 2019 cohort. Expect a substantially larger number of metamorphs in 2022 from 2021 cohort.
Recruitment
- As expected for this high elevation site, no recruitment of new adults has occurred yet.
- Unlikely that metamorphs in 2021 will grow to adult size by 2022, so recruitment may not be observed until 2023.
Population size
- 2021 estimated population size is approximately 25 adults.
- All adults seen in northern 1/3 or 1/2 of lake.

70619
Survival
- 1-year survival of the 2008 cohort is low (0.22).
- As seen at other sites, despite lack of gartersnakes, population declined substantially during summer 2008 following translocation. Mortality caused by Bd? Poor-quality habitat?
Reproduction
- Tadpoles seen during most surveys conducted after 2011, but always in relatively small numbers (&le 25). No obvious basking habitat for tadpoles in lake due to steeply sloped littoral zone dominated by large boulders. Subadults seen occasionally.
Recruitment
- Only evidence of recruitment was in 2019 when four untagged and relatively small adults were captured and tagged.
Population size
- Estimated population size declined relatively rapidly during summer 2018, and since 2012 has been near zero.

70628
Survival
- 1-year survival of the 2020 cohort is 0.65. Seems quite high for frogs from the 72996 donor population.
Reproduction
- No tadpoles seen during the 2021-08-10 VES, but hopefully will be observed during surveys in 2022.
Recruitment
- No recruitment expected until at least 2024.
Population size
- 2021 estimated population size is approximately 17 adults

70641
Survival
- The three translocated cohorts (2015, 2017, 2020) have all shown low 1-year survival (0.27, 0.16, 0.07, respectively).
- Gartersnakes present at site, but within months of translocation frogs grow to large sizes that provide a refuge from predation.
- Frogs at this site grow quickly and attain large sizes (up to 82 mm SVL - in 2021)
Reproduction
- Reproduction in this population is difficult to assess because non-adult life stages are rarely seen due to thick littoral zone vegetation.
- No tadpoles have been observed during VES, and the only subadult observed was in 2019.
- However, new adult recruits have been captured, so some reproduction is obviously occurring.
Recruitment
- A total of 4 new (untagged) frogs have been captured, including 1 in 2017, 2 in 2019, and 1 in 2020.
Population size
- The 2021 estimated population size is near 0.

74976
Survival
- Unusually high 1-year survival of the 2018 cohort of translocated frogs (0.94).
- Survival of 2020 cohort of translocated frogs was lower, but still high (0.67).
Reproduction
- Successful reproduction (as evidenced by first-year tadpoles) observed in 2019, 2020, and 2021.
- 2019 cohort contained at least 250 individuals, based on count conducted on 09-Sep-2019. Cohort appeared to experience relatively low overwinter survival (perhaps due to the heavy 2019 snow year –> short 2019 summer –> small tadpole size going into 2020 winter), with approximately 25 second-year tadpoles counted on 20-Aug-2020. 5 metamorphs seen during the August 2020 CMR.
- 2020 cohort contained at least 320 individuals, based on count conducted on 20-Aug-2020. Tadpole count on 25-Jun-2021 indicated 386 second-year animals, suggesting high overwinter survival of first-year tadpoles compared to that shown by 2019 cohort (perhaps due to light 2020 snow year –> long 2020 summer –> large tadpole size going into 2021 winter).
- 2021 cohort contained at least 305 individuals, based on count conducted on 18-Aug-2021.
- Many subadults counted during mid-August 2021 survey (203), compared to very few in late-summer 2020.
Recruitment
- First new recruits into the adult population (5) captured during mid-August 2021 CMR survey. Likely all from 2019 cohort, but large size range (41-50 mm) suggests that these adults were from animals that metamorphosed in both late-summer 2020 and early-summer 2021.
Population size
- 2021 estimated population size is approximately 28 adults.
- As of mid-August 2021, frog population extends from Lower Pool outlet to 72973.
- 72973 (uppermost pond) was colonized by adults and metamorphs in 2020.
- All reproduction is occurring in 74976.
- Population seems likely to become firmly established in next few years.

Reintroduced populations
LS0tCnRpdGxlOiAiTm90ZWJvb2s6IFJlc3VsdHMgZnJvbSBhbmFseXNpcyBvZiBDTVIgZGF0YXNldHMiCmF1dGhvcjogIlJvbGFuZCBLbmFwcCIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOgogICAgdG9jOiB0cnVlCiAgICB0aGVtZTogdW5pdGVkCmVkaXRvcl9vcHRpb25zOiAKICBjaHVua19vdXRwdXRfdHlwZTogaW5saW5lCi0tLQoKIyMgT3ZlcnZpZXcKVGhpcyBub3RlYm9vayBjb250YWlucyBhIHN1bW1hcnkgb2YgcmVzdWx0cyBvYnRhaW5lZCBmcm9tIHRoZSBhbmFseXNpcyBvZiBjYXB0dXJlLW1hcmstcmVjYXB0dXJlIChDTVIpIGRhdGEgZnJvbSBtb3VudGFpbiB5ZWxsb3ctbGVnZ2VkIGZyb2cgcG9wdWxhdGlvbnMgaW4gQ2FsaWZvcm5pYSdzIFNpZXJyYSBOZXZhZGEuClRoZXNlIGRhdGEgYXJlIGNvbGxlY3RlZCBieSB0aGUgW01vdW50YWluIExha2VzIFJlc2VhcmNoIEdyb3VwXShodHRwczovL21vdW50YWlubGFrZXNyZXNlYXJjaC5jb20pLCB1c3VhbGx5IG9uIGFuIGFubnVhbCBiYXNpcy4gClRoZSBpbnRlbnQgb2YgdGhpcyBub3RlYm9vayBpcyB0byBwcm92aWRlIGEgc2luZ2xlIGZpbGUgd2hlcmUgcmVzZWFyY2hlcnMgYW5kIG1hbmFnZXJzIGNhbiBvYnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZXNlIHBvcHVsYXRpb25zLCBtYW55IG9mIHdoaWNoIGFyZSBjcml0aWNhbGx5IGltcG9ydGFudCBmb3IgdGhlIHJlY292ZXJ5IG9mIHRoaXMgc3BlY2llcy4gCkRhdGEgZnJvbSB2aXN1YWwgZW5jb3VudGVyIHN1cnZleXMgYXJlIGFsc28gaW5jbHVkZWQgaW4gdGhlIHN1bW1hcnkgdG8gYXVnbWVudCB0aGUgcmVzdWx0cyBmcm9tIENNUiBzdXJ2ZXlzLiAKVGhpcyBpbmZvcm1hdGlvbiBpcyB1cGRhdGVkIGFubnVhbGx5IGFzIGRhdGEgZnJvbSB0aGUgbW9zdCByZWNlbnQgc3VtbWVyIGZpZWxkIHNlYXNvbiBpcyBhbmFseXplZC4gCgpJbiB0aGUgZm9sbG93aW5nIHN1bW1hcnksIHBvcHVsYXRpb25zIGFyZSBjYXRlZ29yaXplZCBhcyAiRG9ub3IgcG9wdWxhdGlvbnMiLCAiVHJhbnNsb2NhdGVkIHBvcHVsYXRpb25zIiwgYW5kICJSZWludHJvZHVjZWQgcG9wdWxhdGlvbnMiLCBhbmQgd2l0aGluIHRoZXNlIGNhdGVnb3JpZXMgcG9wdWxhdGlvbnMgYXJlIGlkZW50aWZpZWQgYnkgdGhlaXIgZml2ZS1kaWdpdCBzaXRlIGlkLiAKVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgZnJvZ3MgaW4gYWxsIHBvcHVsYXRpb25zIGFyZSBpbmZlY3RlZCB3aXRoIHRoZSBhbXBoaWJpYW4gY2h5dHJpZCBmdW5ndXMsICpCYXRyYWNob2NoeXRyaXVtIGRlbmRyb2JhdGlkaXMqIChCZCkuIApVbmxpa2UgdGhlIHNldmVyZSBlZmZlY3RzIGNhdXNlZCBieSBCZCBmb2xsb3dpbmcgaXRzIGluaXRpYWwgYXJyaXZhbCBpbiB0aGVzZSBwb3B1bGF0aW9ucywgdXN1YWxseSBkZWNhZGVzIGFnbywgbWFueSBvZiB0aGVzZSBwb3B1bGF0aW9ucyBhcmUgbm93IGNvLWV4aXN0aW5nIHdpdGggQmQuIApUaGUgcmVhc29ucyBmb3IgdGhpcyBjaGFuZ2VkIGR5bmFtaWMgYXJlIHVuZGVyIHN0dWR5LCBhbmQgYXBwZWFyIHRvIGludm9sdmUgZXZvbHV0aW9uYXJ5IGNoYW5nZXMgaW4gZnJvZ3MgdGhhdCBoYXZlIG1hZGUgdGhlbSBsZXNzIHN1c2NlcHRpYmxlIHRvIGNoeXRyaWRpb215Y29zaXMsIHRoZSBkaXNlYXNlIGNhdXNlZCBieSBCZC4gCgojIyBEb25vciBwb3B1bGF0aW9ucwoKIyMgVHJhbnNsb2NhdGVkIHBvcHVsYXRpb25zCgojIyMgNzAxMzQKCiMjIyMgU3Vydml2YWwKKiBWZXJ5IGxvdyAxLXllYXIgc3Vydml2YWwgb2YgdGhlIDIwMDYgY29ob3J0IG9mIHRyYW5zbG9jYXRlZCBmcm9ncyAoMC4xMikuIE9ubHkgc2l4IGFkdWx0cyBzZWVuIGluIDIwMDcgYW5kIG5vbmUgdGhlcmVhZnRlci4KKiAqVC4gZWxlZ2FucyogbmV2ZXIgc2VlbiBhdCBzaXRlLCBzbyBsaWtlbHkgbm90IHJlc3BvbnNpYmxlIGZvciBsb3cgc3Vydml2YWwuIAoKIyMjIyBSZXByb2R1Y3Rpb24KKiBObyBldmlkZW5jZSBvZiByZXByb2R1Y3Rpb24gd2FzIGV2ZXIgc2Vlbi4gCgohW10oLi4vLi4vb3V0L3Bsb3RzLzcwMTM0X21ybXJfcGxvdHMucG5nKXt3aWR0aD03NSV9CgojIyMgNzAzNzAKCiMjIyMgU3Vydml2YWwKKiBWZXJ5IGxvdyAxLXllYXIgc3Vydml2YWwgb2YgYm90aCB0aGUgMjAxNiBhbmQgMjAxOCB0cmFuc2xvY2F0ZWQgY29ob3J0cyAoMC4wNCBhbmQgMC4xNywgcmVzcGVjdGl2ZWx5KS4gCiogSGFiaXRhdCBsb29rcyB2ZXJ5IGdvb2QgZm9yICpSLiBzaWVycmFlKiBmb3IgYm90aCBzdW1tZXIgYW5kIHdpbnRlciwgc28gaXQgcmVtYWlucyB1bmNsZWFyIHdoYXQgdGhlIGZhY3RvciBsaW1pdGluZyBmcm9nIHN1cnZpdmFsIGF0IHRoaXMgc2l0ZSBpcy4gCkl0IGlzIHVubGlrZWx5IHJlbGF0ZWQgdG8gd2ludGVyIG94eWdlbiBsZXZlbHMgaW4gdGhlIHdhdGVyIGJlY2F1c2UgdHJvdXQgdGhyaXZlZCBoZXJlIGZvciBkZWNhZGVzLiAKCiMjIyMgUmVwcm9kdWN0aW9uCiogTm8gZXZpZGVuY2Ugb2YgcmVwcm9kdWN0aW9uIHdhcyBldmVyIG9ic2VydmVkLiAKCiMjIyMgUG9wdWxhdGlvbiBzaXplCiogUG9wdWxhdGlvbiBzaXplIHJldHVybmVkIHRvIG5lYXItemVybyB3aXRoaW4gb25lIHllYXIgb2YgZWFjaCB0cmFuc2xvY2F0aW9uLiAKKiBUaGUgYWJzZW5jZSBvZiBhbnkgZnJvZ3MgZHVyaW5nIHRoZSAyMDIwIHN1cnZleSBzdWdnZXN0cyB0aGF0IHRoZSBwb3B1bGF0aW9uIGlzIGV4dGlycGF0ZWQuIAoKIVtdKC4uLy4uL291dC9wbG90cy83MDM3MF9tcm1yX3Bsb3RzLnBuZyl7d2lkdGg9NzUlfQoKIyMjIDcwNDEzCgojIyMjIFN1cnZpdmFsCiogUmVsYXRpdmVseSBoaWdoIDEteWVhciBzdXJ2aXZhbCBvZiB0aGUgMjAxMywgMjAxNSwgYW5kIDIwMTcgY29ob3J0cyBvZiB0cmFuc2xvY2F0ZWQgZnJvZ3MgKDAuNjksIDAuNjQsIDAuNTYsIHJlc3BlY3RpdmVseSkuCgojIyMjIFJlcHJvZHVjdGlvbgoqIEVnZyBtYXNzZXMsIHRhZHBvbGVzLCBhbmQvb3Igc3ViYWR1bHRzIGhhdmUgYmVlbiBvYnNlcnZlZCBhbm51YWxseSBzdGFydGluZyBpbiAyMDE0LCB3aXRoIGEgbWF4aW11bSBjb3VudCBzdW1tZWQgYWNyb3NzIGFsbCBzaXRlcyBvZiA4MDAgaW4gMjAxNS4KKiBTdWJhZHVsdHMgd2VyZSBmaXJzdCBvYnNlcnZlZCBpbiAyMDE1IGFuZCBhcmUgYWx3YXlzIHNlZW4gaW4gcmVsYXRpdmVseSBsb3cgbnVtYmVycyAobWF4aW11bSBjb3VudCA9IDI3KS4KCiMjIyMgUmVjcnVpdG1lbnQKKiBSZWNydWl0bWVudCBvZiBuZXcgYWR1bHRzIHdhcyBmaXJzdCBvYnNlcnZlZCBpbiAyMDE2LCBhbmQgaGFzIG9jY3VycmVkIGluIGFsbCB5ZWFycyBzaW5jZS4gCiogTnVtYmVyIG9mIG5ldyByZWNydWl0cyBzZWVtcyBxdWl0ZSByZWd1bGFyLCB3aXRoIDIwLCAxNSwgYW5kIDI0IHJlY3J1aXRzIHRhZ2dlZCBpbiAyMDE4LCAyMDIwLCBhbmQgMjAyMSwgcmVzcGVjdGl2ZWx5LiAKCiMjIyMgUG9wdWxhdGlvbiBzaXplCiogRnJvbSAyMDE3IHRvIGVhcmx5LTIwMjEgKGkuZS4sIHByaW9yIHRvIHRyYW5zbG9jYXRpb24gYW5kIHJlaW50cm9kdWN0aW9uIG9mIDExNyBmcm9ncyksIGVzdGltYXRlZCBwb3B1bGF0aW9uIHNpemUgYWNyb3NzIGFsbCBzaXRlcyB3YXMgc3RhYmxlIGF0IGFwcHJveGltYXRlbHkgNTAgYWR1bHRzIGluIGVhY2ggeWVhci4KKiBUaGlzIHBvcHVsYXRpb24sIGFsdGhvdWdoIHN0aWxsIHJlbGF0aXZlbHkgc21hbGwgZ2l2ZW4gdGhlIGFidW5kYW50IGhpZ2ggcXVhbGl0eSBoYWJpdGF0LCBhcHBlYXJzIHdlbGwtZXN0YWJsaXNoZWQgYW5kIHNlbGYtc3VzdGFpbmluZy4gCiogVGhlIDIwMjEgdHJhbnNsb2NhdGlvbiBhbmQgcmVpbnRyb2R1Y3Rpb24gaXMgbGlrZWx5IHRvIHN1YnN0YW50aWFsbHkgaW5jcmVhc2UgdGhlIHBvcHVsYXRpb24gc2l6ZS4gCgohW10oLi4vLi4vb3V0L3Bsb3RzLzcwNDEzX21ybXJfcGxvdHMucG5nKXt3aWR0aD03NSV9CgojIyMgNzA0MTQKCiMjIyMgU3Vydml2YWwKKiBWZXJ5IGxvdyAxLXllYXIgc3Vydml2YWwgb2YgdGhlIDIwMDYgY29ob3J0IG9mIHRyYW5zbG9jYXRlZCBmcm9ncyAoMC4wMSksIGFuZCBubyBhZHVsdHMgc2VlbiBpbiAyMDA3LgoqIE51bWJlciBvZiAqVC4gZWxlZ2FucyogYXBwZWFyZWQgdG8gaW5jcmVhc2UgbWFya2VkbHkgZm9sbG93aW5nIHRyYW5zbG9jYXRpb24sIG1heSBoYXZlIGJlZW4gYXQgbGVhc3QgcGFydGlhbGx5IHJlc3BvbnNpYmxlIGZvciBsb3cgc3Vydml2YWwuIAoKIyMjIyBSZXByb2R1Y3Rpb24KKiBObyBldmlkZW5jZSBvZiByZXByb2R1Y3Rpb24gd2FzIGV2ZXIgc2Vlbi4gCgohW10oLi4vLi4vb3V0L3Bsb3RzLzcwNDE0X21ybXJfcGxvdHMucG5nKXt3aWR0aD03NSV9CgojIyMgNzA0NDkKCiMjIyMgU3Vydml2YWwKKiBJbnRlcm1lZGlhdGUgbGV2ZWwgb2Ygc3Vydml2YWwgb2YgdGhlIDIwMTQgY29ob3J0IG9mIHRyYW5zbG9jYXRlZCBmcm9ncyAoMC4zNSkuCiogU3Vydml2YWwgb2YgdGhlIDIwMTcgY29ob3J0IG9mIHRyYW5zbG9jYXRlZCBmcm9ncyB3YXMgc29tZXdoYXQgaGlnaGVyICgwLjUzKS4KKiBNb3JlIGZyb2dzIGZvdW5kIGRlYWQgYXQgdGhpcyBzaXRlIHRoYW4gaXMgdHlwaWNhbGx5IHRoZSBjYXNlIGF0IG90aGVyIHNpdGVzLiAKV2hldGhlciB0aGlzIGlzIGR1ZSB0byBzaXRlIGNoYXJhY3RlcmlzdGljcyAoZS5nLiwgbGFjayBvZiBoaWRpbmcgY292ZXIpIHRoYXQgbWFrZSBjYXJjYXNzZXMgZWFzaWVyIHRvIGRldGVjdCwgb3IgcG9wdWxhdGlvbiBjaGFyYWN0ZXJpc3RpY3MgKGkuZS4sIHJlbGF0aXZlbHkgbG93IHN1cnZpdmFsKSBpcyB1bmtub3duLiAKKiBBZHVsdCBmcm9ncyBhdCB0aGlzIHNpdGUgY29tbW9ubHkgZmVlZCBvbiBIWVJFIHRhZHBvbGVzIGFuZCBzdWJhZHVsdHMgYW5kIGFyZSB2ZXJ5IHdlbGwtZmVkLiAKSXQgd291bGQgYmUgaW50ZXJlc3RpbmcgdG8ga25vdyB3aGV0aGVyIHRoZXNlIGZyb2dzIGdyb3cgcXVpY2tseSBidXQgaGF2ZSBzaG9ydCBsaWZlIHNwYW5zIGNvbXBhcmVkIHRvIGZyb2dzIGF0IGhpZ2hlciBlbGV2YXRpb25zLiAKCiMjIyMgUmVwcm9kdWN0aW9uIAoqIEVnZyBtYXNzZXMsIHRhZHBvbGVzLCBhbmQvb3Igc3ViYWR1bHRzIGhhdmUgYmVlbiBvYnNlcnZlZCBhbm51YWxseSBzaW5jZSAyMDE1LCBidXQgYWx3YXlzIGluIHJlbGF0aXZlbHkgc21hbGwgbnVtYmVycyAobWF4aW11bSBjb3VudCA9IDgwIHRhZHBvbGVzKS4KKiBUaGUgcmVsYXRpdmVseSBsb3cgbnVtYmVycyBhcmUgbGlrZWx5IGR1ZSB0byBoaWdoIGhhYml0YXQgY29tcGxleGl0eSBhbmQgdGhlIGZhY3QgdGhhdCBhdCB0aGlzIGVsZXZhdGlvbiB0YWRwb2xlcyBvZnRlbiBkbyBub3QgYWdncmVncmF0ZSBuZWFyIHNob3JlLiAKCiMjIyMgUmVjcnVpdG1lbnQKKiBSZWNydWl0bWVudCBvZiBuZXcgYWR1bHRzIGhhcyBvY2N1cnJlZCBpbiBtb3N0IHllYXJzIHNpbmNlIDIwMTYsIHdpdGggYSBtYXhpbXVtIG51bWJlciBvZiAxNSBpbiAyMDE2LiAKKiBTdWJzdGFudGlhbCByZWNydWl0bWVudCBvY2N1cnJlZCBpbiAyMDE2LCBqdXN0IHR3byB5ZWFycyBhZnRlciB0aGUgZmlyc3QgdHJhbnNsb2NhdGlvbi4gClRoaXMgaW5kaWNhdGVzIHRoYXQgYXQgdGhpcyByZWxhdGl2ZWx5IGxvdyBlbGV2YXRpb24gc2l0ZSwgdGhlIHRyYW5zaXRpb24gZnJvbSBlZ2cgdG8gYWR1bHQgY2FuIG9jY3VyIGluIG9ubHkgMS41IHllYXJzLiAKKiBSZWNydWl0bWVudCBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgcGFydGljdWxhcmx5IGVwaXNvZGljLCBpbiBjb250cmFzdCB0byB3aGF0IGlzIG9ic2VydmVkIGF0IHNvbWUgb3RoZXIgc2l0ZXMuCgojIyMjIFBvcHVsYXRpb24gc2l6ZQoqIFBvcHVsYXRpb24gYXBwZWFycyB0byBoYXZlIHN0YWJpbGl6ZWQgYXQgMjAtMjUgYWR1bHRzLiAKQWx0aG91Z2ggc21hbGxlciB0aGFuIGhvcGVkIGZvciwgdGhpcyBtYXkgYmUgYSB0eXBpY2FsIHBvcHVsYXRpb24gc2l6ZSBhdCB0aGlzIGVsZXZhdGlvbiBkdWUgdG8gcHJlZGF0aW9uIGZyb20gc25ha2VzIGFuZCBpbnZlcnRlYnJhdGUgcHJlZGF0b3JzLiAKCiFbXSguLi8uLi9vdXQvcGxvdHMvNzA0NDlfbXJtcl9wbG90cy5wbmcpe3dpZHRoPTc1JX0KCgojIyMgNzA1MDUKCiMjIyMgU3Vydml2YWwKKiBMb3cgMS15ZWFyIHN1cnZpdmFsIG9mIHRoZSAyMDA4LCAyMDEzLCAyMDE1LCBhbmQgMjAxNyBjb2hvcnRzIG9mIHRyYW5zbG9jYXRlZCBmcm9ncyAoMC4xOSwgMC4xNiwgMC4xMCwgMC4xMCkuCgojIyMjIFJlcHJvZHVjdGlvbgoqIFRhZHBvbGVzIGFuZC9vciBzdWJhZHVsdHMgc2VlbiBpbiBldmVyeSB5ZWFyIHN0YXJ0aW5nIGluIDIwMTAuIAoqIENvdW50cyBvZiB0aGVzZSBsaWZlIHN0YWdlcyBhcmUgZ2VuZXJhbGx5IGxvdyAoPCAyNSksIGJ1dCB0aGUgMjAwIHRhZHBvbGVzIGNvdW50ZWQgaW4gMjAxOCB3ZXJlIGFuIG9idmlvdXMgZXhjZXB0aW9uLiAKCiMjIyMgUmVjcnVpdG1lbnQKKiBGaXJzdCBuZXcgcmVjcnVpdHMgaW50byB0aGUgYWR1bHQgcG9wdWxhdGlvbiB3ZXJlIG9ic2VydmVkIGluIDIwMTIuIAoqIFNvbWUgcmVjcnVpdG1lbnQgb2YgbmV3IGFkdWx0cyBvY2N1cnJlZCBpbiBtb3N0IHllYXJzLCBpbmNsdWRpbmcgMTItMTcgcmVjcnVpdHMgcGVyIHllYXIgaW4gMjAxMywgMjAxNCwgYW5kIDIwMTUuIAoKIyMjIyBQb3B1bGF0aW9uIHNpemUKKiBFc3RpbWF0ZWQgcG9wdWxhdGlvbiBzaXplIGluIHRoZSBsYXN0IHN1cnZleSB5ZWFyICgyMDE4KSB3YXMgYXBwcm94aW1hdGVseSA2IGFkdWx0cy4gCiogVGhpcyBzbWFsbCBwb3B1bGF0aW9uIHNpemUgaXMgbGlrZWx5IGR1ZSB0byBzdXJ2aXZhbCBvZiBhZHVsdHMgYmVpbmcgbG93IGVub3VnaCB0byBwcmVjbHVkZSBwb3B1bGF0aW9uIGdyb3d0aCwgZXZlbiB3aXRoIDQgdHJhbnNsb2NhdGlvbnMgYW5kIG5hdHVyYWwgcmVjcnVpdG1lbnQgb2YgYWR1bHRzIGluIHNldmVyYWwgeWVhcnMuCiogQXZhaWxhYmxlIGV2aWRlbmNlIHN1Z2dlc3RzIHRoYXQsIGF0IGJlc3QsIHRoaXMgc2l0ZSB3aWxsIHN1cHBvcnQgb25seSBhIHNtYWxsIGZyb2cgcG9wdWxhdGlvbiwgYW5kIGNvbmR1Y3RpbmcgYWRkaXRpb25hbCB0cmFuc2xvY2F0aW9ucyB3aWxsIGxpa2VseSBub3QgYWx0ZXIgdGhhdCBvdXRjb21lLiAKCiFbXSguLi8uLi9vdXQvcGxvdHMvNzA1MDVfbXJtcl9wbG90cy5wbmcpe3dpZHRoPTc1JX0KCgojIyMgNzA1NTAgCgojIyMjIFN1cnZpdmFsCiogUmVsYXRpdmVseSBoaWdoIDEteWVhciBzdXJ2aXZhbCBvZiB0aGUgMjAwNiBjb2hvcnQgb2YgdHJhbnNsb2NhdGVkIGZyb2dzICgwLjYxKS4gCiogU3Vydml2YWwgb2YgMjAxMyBjb2hvcnQgb2YgdHJhbnNsb2NhdGVkIGZyb2dzIHdhcyBzdWJzdGFudGlhbGx5IGxvd2VyICgwLjI5KS4gCgojIyMjIFJlcHJvZHVjdGlvbgoqIFRhZHBvbGVzIGFuZCBzdWJhZHVsdHMgd2VyZSBmaXJzdCBvYnNlcnZlZCBpbiAyMDA4LiAKKiBCb3RoIGxpZmUgc3RhZ2VzIHdlcmUgb2JzZXJ2ZWQgaW4gYWxsIHN1YnNlcXVlbnQgc3VydmV5cyAoMjAwOC0yMDIxKSwgYW5kIGluIG11Y2ggaGlnaGVyIG51bWJlcnMgdGhhbiBpbiBhbnkgb3RoZXIgdHJhbnNsb2NhdGVkIHBvcHVsYXRpb24uCiogU2luY2UgMjAxNiwgdGFkcG9sZSBjb3VudHMgZnJvbSB2aXN1YWwgZW5jb3VudGVyIHN1cnZleXMgaGF2ZSBvZnRlbiBleGNlZWRlZCAxNTAwIGluZGl2aWR1YWxzLiAKCiMjIyMgUmVjcnVpdG1lbnQKKiBUaGUgZmlyc3QgcmVjcnVpdCBpbnRvIHRoZSBhZHVsdCBwb3B1bGF0aW9uIHdhcyBvYnNlcnZlZCBpbiAyMDEwLCBhbmQgZXhjZXB0IGZvciAyMDExLCBuZXcgcmVjcnVpdHMgaGF2ZSBiZWVuIHRhZ2dlZCBpbiBldmVyeSBzdWJzZXF1ZW50IHllYXIgKDIwMTAsIDIwMTItMjAyMSkuIAoqIFJlY3J1aXRtZW50IG1hZ25pdHVkZSBpcyBoaWdobHkgdmFyaWFibGUgYmV0d2VlbiB5ZWFycywgd2l0aCBub3RhYmx5IGxhcmdlIHJlY3J1aXRtZW50IGV2ZW50cyBpbiAyMDE2IGFuZCAyMDIxLCBhbmQgbG93ZXIgYnV0IHN1YnN0YW50aWFsIHJlY3J1aXRtZW50IGluIHNldmVyYWwgYWRkaXRpb25hbCB5ZWFycyAoMjAxMywgMjAxNCwgMjAxOCwgMjAyMCkuIAoqIFRoaXMgdmFyaWF0aW9uIG1heSByZXN1bHQgZnJvbSBhbiBpbnRlcmFjdGlvbiBiZXR3ZWVuIHN1YmFkdWx0IHN1cnZpdmFsLCBCZCBpbmZlY3Rpb24sIGFuZCB3aW50ZXIgc2V2ZXJpdHkuIAoKIyMjIyBQb3B1bGF0aW9uIHNpemUKKiBGb2xsb3dpbmcgdGhlIG9yaWdpbmFsIHRyYW5zbG9jYXRpb24gaW4gMjAwNiwgdGhlIGVzdGltYXRlZCBwb3B1bGF0aW9uIHdhcyA8IDUwIGFkdWx0cyB1bnRpbCAyMDEzLiBEdXJpbmcgMjAxMy0yMDE1LCB0aGUgcG9wdWxhdGlvbiBpbmNyZWFzZWQgdG8gMTAwLTE1MCBhZHVsdHMuClNpbmNlIHRoZSBsYXJnZSByZWNydWl0bWVudCBldmVudCBpbiAyMDE2LCB0aGUgcG9wdWxhdGlvbiBoYXMgZmx1Y3R1YXRlZCBiZXR3ZWVuIDE3MCBhbmQgNDIwIGFkdWx0cywgd2l0aCBhbiBhdmVyYWdlIHBvcHVsYXRpb24gc2l6ZSBvZiBhcHByb3hpbWF0ZWx5IDI1MCBhZHVsdHMuCiogVGhpcyBwb3B1bGF0aW9uIGlzIG5vdyB3ZWxsLWVzdGFibGlzaGVkLCBhbmQgaXMgbGFyZ2UgZW5vdWdoIHRvIHNlcnZlIGFzIGEgZG9ub3Igb2YgZnJvZ3MgZm9yIGZ1dHVyZSBmcm9nIHJlY292ZXJ5IGFjdGlvbnMuIAoqIFRoZSAxNi15ZWFyIG1hcmstcmVjYXB0dXJlIGRhdGFzZXQgaGFzIGFsbG93ZWQgdW5wcmVjZWRlbnRlZCBpbnNpZ2h0cyBpbnRvIHRoZSBkeW5hbWljcyBvZiBwb3B1bGF0aW9uIGVzdGFibGlzaG1lbnQuIApJdCBpcyBhbHNvIGFsbG93aW5nIHVzIHRvIHRlc3QgaHlwb3RoZXNlcyByZWdhcmRpbmcgdGhlIGRyaXZlcnMgb2YgdGhlIG9ic2VydmVkIHBvcHVsYXRpb24gZHluYW1pY3MsIGluZm9ybWF0aW9uIHRoYXQgaXMgY3JpdGljYWwgZm9yIHRoZSBkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uIG9mIGZ1dHVyZSBmcm9nIHJlY292ZXJ5IGFjdGlvbnMuCgohW10oLi4vLi4vb3V0L3Bsb3RzLzcwNTUwX21ybXJfcGxvdHMucG5nKXt3aWR0aD03NSV9CgoKIyMjIDcwNTU2CgojIyMjIFN1cnZpdmFsCiogUmVsYXRpdmVseSBoaWdoIDEteWVhciBzdXJ2aXZhbCBvZiB0aGUgMjAxOCBjb2hvcnQgb2YgdHJhbnNsb2NhdGVkIGZyb2dzICgwLjczKS4gCiogU3Vydml2YWwgb2YgMjAyMCBjb2hvcnQgb2YgdHJhbnNsb2NhdGVkIGZyb2dzIHdhcyBsb3dlciwgYnV0IHN0aWxsIGhpZ2ggKDAuNjEpLgoqIE5vdCBhcyBoaWdoIGFzIDc0OTc2IGRlc3BpdGUgYm90aCBzaXRlcyByZWNlaXZpbmcgZnJvZ3MgZnJvbSBzYW1lIGRvbm9yIHBvcHVsYXRpb24gYW5kIGluIHRoZSBzYW1lIHR3byB5ZWFycy4gCgojIyMjIFJlcHJvZHVjdGlvbgoqIFN1Y2Nlc3NmdWwgcmVwcm9kdWN0aW9uIG9jY3VycmVkIGluIDIwMTkgKGJhc2VkIG9uIDJuZC15ZWFyIHRhZHMgc2VlbiBpbiAyMDIwKSwgMjAyMCAoMXN0LXllYXIgdGFkcyksIGFuZCAyMDIxICgxc3QteWVhciB0YWRzKS4gCiogMjAxOSBjb2hvcnQgd2FzIG5vdCBzZWVuIHVudGlsIDIwMjAgKDA3LTA3KSBhbmQgd2FzIG1hZGUgdXAgb2Ygb25seSB+MTUgdGFkcG9sZXMuIApTdWdnZXN0cyBsaW1pdGVkIHJlcHJvZHVjdGlvbiBpbiAyMDE5IGFuZC9vciBsb3cgc3Vydml2YWwgZHVyaW5nIDIwMTktMjAyMCB3aW50ZXIuIAoqIDIwMjAgY29ob3J0IGNvbnRhaW5lZCBhdCBsZWFzdCA0MjUgaW5kaXZpZHVhbHMsIGJhc2VkIG9uIGNvdW50IGNvbmR1Y3RlZCBvbiAwOC0yMy4gClRhZHBvbGUgY291bnQgb24gMjAyMS0wNy0yMiBpbmRpY2F0ZWQgMzUwIHNlY29uZC15ZWFyIGFuaW1hbHMsIHN1Z2dlc3RpbmcgaGlnaCBvdmVyd2ludGVyIHN1cnZpdmFsIG9mIGZpcnN0LXllYXIgdGFkcG9sZXMgY29tcGFyZWQgdG8gdGhhdCBzaG93biBieSAyMDE5IGNvaG9ydCAocGVyaGFwcyBkdWUgdG8gbGlnaHQgMjAyMCBzbm93IHllYXIgLS0+IGxvbmcgMjAyMCBzdW1tZXIgLS0+IGxhcmdlIHRhZHBvbGUgc2l6ZSBnb2luZyBpbnRvIDIwMjEgd2ludGVyKS4gCiogMjAyMSBjb2hvcnQgY29udGFpbmVkIGFwcHJveGltYXRlbHkgNDM1IGluZGl2aWR1YWxzLCBiYXNlZCBvbiBjb3VudCBjb25kdWN0ZWQgb24gMjAyMS0wOC0yNi4gCiogRmlyc3QgbWV0YW1vcnBocyBzZWVuIGluIDIwMjEgKDEgb24gMDctMjIgYW5kIDEzIG9uIDA4LTI2KSwgc21hbGwgbnVtYmVycyBsaWtlbHkgZHVlIHRvIHNtYWxsIHNpemUgb2YgdGhlIDIwMTkgY29ob3J0LiAKRXhwZWN0IGEgc3Vic3RhbnRpYWxseSBsYXJnZXIgbnVtYmVyIG9mIG1ldGFtb3JwaHMgaW4gMjAyMiBmcm9tIDIwMjEgY29ob3J0LiAKCiMjIyMgUmVjcnVpdG1lbnQKKiBBcyBleHBlY3RlZCBmb3IgdGhpcyBoaWdoIGVsZXZhdGlvbiBzaXRlLCBubyByZWNydWl0bWVudCBvZiBuZXcgYWR1bHRzIGhhcyBvY2N1cnJlZCB5ZXQuIAoqIFVubGlrZWx5IHRoYXQgbWV0YW1vcnBocyBpbiAyMDIxIHdpbGwgZ3JvdyB0byBhZHVsdCBzaXplIGJ5IDIwMjIsIHNvIHJlY3J1aXRtZW50IG1heSBub3QgYmUgb2JzZXJ2ZWQgdW50aWwgMjAyMy4gCgojIyMjIFBvcHVsYXRpb24gc2l6ZSAKKiAyMDIxIGVzdGltYXRlZCBwb3B1bGF0aW9uIHNpemUgaXMgYXBwcm94aW1hdGVseSAyNSBhZHVsdHMuIAoqIEFsbCBhZHVsdHMgc2VlbiBpbiBub3J0aGVybiAxLzMgb3IgMS8yIG9mIGxha2UuIAoKIVtdKC4uLy4uL291dC9wbG90cy83MDU1Nl9tcm1yX3Bsb3RzLnBuZyl7d2lkdGg9NzUlfQoKCiMjIyA3MDYxOQoKIyMjIyBTdXJ2aXZhbAoqIDEteWVhciBzdXJ2aXZhbCBvZiB0aGUgMjAwOCBjb2hvcnQgaXMgbG93ICgwLjIyKS4gCiogQXMgc2VlbiBhdCBvdGhlciBzaXRlcywgZGVzcGl0ZSBsYWNrIG9mIGdhcnRlcnNuYWtlcywgcG9wdWxhdGlvbiBkZWNsaW5lZCBzdWJzdGFudGlhbGx5IGR1cmluZyBzdW1tZXIgMjAwOCBmb2xsb3dpbmcgdHJhbnNsb2NhdGlvbi4gTW9ydGFsaXR5IGNhdXNlZCBieSBCZD8gUG9vci1xdWFsaXR5IGhhYml0YXQ/CgojIyMjIFJlcHJvZHVjdGlvbgoqIFRhZHBvbGVzIHNlZW4gZHVyaW5nIG1vc3Qgc3VydmV5cyBjb25kdWN0ZWQgYWZ0ZXIgMjAxMSwgYnV0IGFsd2F5cyBpbiByZWxhdGl2ZWx5IHNtYWxsIG51bWJlcnMgKCZsZSAyNSkuIE5vIG9idmlvdXMgYmFza2luZyBoYWJpdGF0IGZvciB0YWRwb2xlcyBpbiBsYWtlIGR1ZSB0byBzdGVlcGx5IHNsb3BlZCBsaXR0b3JhbCB6b25lIGRvbWluYXRlZCBieSBsYXJnZSBib3VsZGVycy4gU3ViYWR1bHRzIHNlZW4gb2NjYXNpb25hbGx5LiAKCiMjIyMgUmVjcnVpdG1lbnQKKiBPbmx5IGV2aWRlbmNlIG9mIHJlY3J1aXRtZW50IHdhcyBpbiAyMDE5IHdoZW4gZm91ciB1bnRhZ2dlZCBhbmQgcmVsYXRpdmVseSBzbWFsbCBhZHVsdHMgd2VyZSBjYXB0dXJlZCBhbmQgdGFnZ2VkLiAKCiMjIyMgUG9wdWxhdGlvbiBzaXplCiogRXN0aW1hdGVkIHBvcHVsYXRpb24gc2l6ZSBkZWNsaW5lZCByZWxhdGl2ZWx5IHJhcGlkbHkgZHVyaW5nIHN1bW1lciAyMDE4LCBhbmQgc2luY2UgMjAxMiBoYXMgYmVlbiBuZWFyIHplcm8uIAoKIVtdKC4uLy4uL291dC9wbG90cy83MDYxOV9tcm1yX3Bsb3RzLnBuZyl7d2lkdGg9NzUlfQoKCiMjIyA3MDYyOAoKIyMjIyBTdXJ2aXZhbAoqIDEteWVhciBzdXJ2aXZhbCBvZiB0aGUgMjAyMCBjb2hvcnQgaXMgMC42NS4gClNlZW1zIHF1aXRlIGhpZ2ggZm9yIGZyb2dzIGZyb20gdGhlIDcyOTk2IGRvbm9yIHBvcHVsYXRpb24uIAoKIyMjIyBSZXByb2R1Y3Rpb24KKiBObyB0YWRwb2xlcyBzZWVuIGR1cmluZyB0aGUgMjAyMS0wOC0xMCBWRVMsIGJ1dCBob3BlZnVsbHkgd2lsbCBiZSBvYnNlcnZlZCBkdXJpbmcgc3VydmV5cyBpbiAyMDIyLiAKCiMjIyMgUmVjcnVpdG1lbnQKKiBObyByZWNydWl0bWVudCBleHBlY3RlZCB1bnRpbCBhdCBsZWFzdCAyMDI0LiAKCiMjIyMgUG9wdWxhdGlvbiBzaXplCiogMjAyMSBlc3RpbWF0ZWQgcG9wdWxhdGlvbiBzaXplIGlzIGFwcHJveGltYXRlbHkgMTcgYWR1bHRzCgohW10oLi4vLi4vb3V0L3Bsb3RzLzcwNjI4X21ybXJfcGxvdHMucG5nKXt3aWR0aD03NSV9CgoKIyMjIDcwNjQxCgojIyMjIFN1cnZpdmFsCiogVGhlIHRocmVlIHRyYW5zbG9jYXRlZCBjb2hvcnRzICgyMDE1LCAyMDE3LCAyMDIwKSBoYXZlIGFsbCBzaG93biBsb3cgMS15ZWFyIHN1cnZpdmFsICgwLjI3LCAwLjE2LCAwLjA3LCByZXNwZWN0aXZlbHkpLiAKKiBHYXJ0ZXJzbmFrZXMgcHJlc2VudCBhdCBzaXRlLCBidXQgd2l0aGluIG1vbnRocyBvZiB0cmFuc2xvY2F0aW9uIGZyb2dzIGdyb3cgdG8gbGFyZ2Ugc2l6ZXMgdGhhdCBwcm92aWRlIGEgcmVmdWdlIGZyb20gcHJlZGF0aW9uLiAKKiBGcm9ncyBhdCB0aGlzIHNpdGUgZ3JvdyBxdWlja2x5IGFuZCBhdHRhaW4gbGFyZ2Ugc2l6ZXMgKHVwIHRvIDgyIG1tIFNWTCAtIGluIDIwMjEpCgojIyMjIFJlcHJvZHVjdGlvbgoqIFJlcHJvZHVjdGlvbiBpbiB0aGlzIHBvcHVsYXRpb24gaXMgZGlmZmljdWx0IHRvIGFzc2VzcyBiZWNhdXNlIG5vbi1hZHVsdCBsaWZlIHN0YWdlcyBhcmUgcmFyZWx5IHNlZW4gZHVlIHRvIHRoaWNrIGxpdHRvcmFsIHpvbmUgdmVnZXRhdGlvbi4KKiBObyB0YWRwb2xlcyBoYXZlIGJlZW4gb2JzZXJ2ZWQgZHVyaW5nIFZFUywgYW5kIHRoZSBvbmx5IHN1YmFkdWx0IG9ic2VydmVkIHdhcyBpbiAyMDE5LgoqIEhvd2V2ZXIsIG5ldyBhZHVsdCByZWNydWl0cyBoYXZlIGJlZW4gY2FwdHVyZWQsIHNvIHNvbWUgcmVwcm9kdWN0aW9uIGlzIG9idmlvdXNseSBvY2N1cnJpbmcuIAoKIyMjIyBSZWNydWl0bWVudAoqIEEgdG90YWwgb2YgNCBuZXcgKHVudGFnZ2VkKSBmcm9ncyBoYXZlIGJlZW4gY2FwdHVyZWQsIGluY2x1ZGluZyAxIGluIDIwMTcsIDIgaW4gMjAxOSwgYW5kIDEgaW4gMjAyMC4gCgojIyMjIFBvcHVsYXRpb24gc2l6ZQoqIFRoZSAyMDIxIGVzdGltYXRlZCBwb3B1bGF0aW9uIHNpemUgaXMgbmVhciAwLiAKCiFbXSguLi8uLi9vdXQvcGxvdHMvNzA2NDFfbXJtcl9wbG90cy5wbmcpe3dpZHRoPTc1JX0KCgojIyMgNzQ5NzYKCiMjIyMgU3Vydml2YWwKKiBVbnVzdWFsbHkgaGlnaCAxLXllYXIgc3Vydml2YWwgb2YgdGhlIDIwMTggY29ob3J0IG9mIHRyYW5zbG9jYXRlZCBmcm9ncyAoMC45NCkuIAoqIFN1cnZpdmFsIG9mIDIwMjAgY29ob3J0IG9mIHRyYW5zbG9jYXRlZCBmcm9ncyB3YXMgbG93ZXIsIGJ1dCBzdGlsbCBoaWdoICgwLjY3KS4KCiMjIyMgUmVwcm9kdWN0aW9uCiogU3VjY2Vzc2Z1bCByZXByb2R1Y3Rpb24gKGFzIGV2aWRlbmNlZCBieSBmaXJzdC15ZWFyIHRhZHBvbGVzKSBvYnNlcnZlZCBpbiAyMDE5LCAyMDIwLCBhbmQgMjAyMS4gCiogMjAxOSBjb2hvcnQgY29udGFpbmVkIGF0IGxlYXN0IDI1MCBpbmRpdmlkdWFscywgYmFzZWQgb24gY291bnQgY29uZHVjdGVkIG9uIDA5LVNlcC0yMDE5LiAKQ29ob3J0IGFwcGVhcmVkIHRvIGV4cGVyaWVuY2UgcmVsYXRpdmVseSBsb3cgb3ZlcndpbnRlciBzdXJ2aXZhbCAocGVyaGFwcyBkdWUgdG8gdGhlIGhlYXZ5IDIwMTkgc25vdyB5ZWFyIC0tPiBzaG9ydCAyMDE5IHN1bW1lciAtLT4gc21hbGwgdGFkcG9sZSBzaXplIGdvaW5nIGludG8gMjAyMCB3aW50ZXIpLCB3aXRoIGFwcHJveGltYXRlbHkgMjUgc2Vjb25kLXllYXIgdGFkcG9sZXMgY291bnRlZCBvbiAyMC1BdWctMjAyMC4gCjUgbWV0YW1vcnBocyBzZWVuIGR1cmluZyB0aGUgQXVndXN0IDIwMjAgQ01SLiAKKiAyMDIwIGNvaG9ydCBjb250YWluZWQgYXQgbGVhc3QgMzIwIGluZGl2aWR1YWxzLCBiYXNlZCBvbiBjb3VudCBjb25kdWN0ZWQgb24gMjAtQXVnLTIwMjAuIApUYWRwb2xlIGNvdW50IG9uIDI1LUp1bi0yMDIxIGluZGljYXRlZCAzODYgc2Vjb25kLXllYXIgYW5pbWFscywgc3VnZ2VzdGluZyBoaWdoIG92ZXJ3aW50ZXIgc3Vydml2YWwgb2YgZmlyc3QteWVhciB0YWRwb2xlcyBjb21wYXJlZCB0byB0aGF0IHNob3duIGJ5IDIwMTkgY29ob3J0IChwZXJoYXBzIGR1ZSB0byBsaWdodCAyMDIwIHNub3cgeWVhciAtLT4gbG9uZyAyMDIwIHN1bW1lciAtLT4gbGFyZ2UgdGFkcG9sZSBzaXplIGdvaW5nIGludG8gMjAyMSB3aW50ZXIpLiAKKiAyMDIxIGNvaG9ydCBjb250YWluZWQgYXQgbGVhc3QgMzA1IGluZGl2aWR1YWxzLCBiYXNlZCBvbiBjb3VudCBjb25kdWN0ZWQgb24gMTgtQXVnLTIwMjEuIAoqIE1hbnkgc3ViYWR1bHRzIGNvdW50ZWQgZHVyaW5nIG1pZC1BdWd1c3QgMjAyMSBzdXJ2ZXkgKDIwMyksIGNvbXBhcmVkIHRvIHZlcnkgZmV3IGluIGxhdGUtc3VtbWVyIDIwMjAuIAoKIyMjIyBSZWNydWl0bWVudAoqIEZpcnN0IG5ldyByZWNydWl0cyBpbnRvIHRoZSBhZHVsdCBwb3B1bGF0aW9uICg1KSBjYXB0dXJlZCBkdXJpbmcgbWlkLUF1Z3VzdCAyMDIxIENNUiBzdXJ2ZXkuIApMaWtlbHkgYWxsIGZyb20gMjAxOSBjb2hvcnQsIGJ1dCBsYXJnZSBzaXplIHJhbmdlICg0MS01MCBtbSkgc3VnZ2VzdHMgdGhhdCB0aGVzZSBhZHVsdHMgd2VyZSBmcm9tIGFuaW1hbHMgdGhhdCBtZXRhbW9ycGhvc2VkIGluIGJvdGggbGF0ZS1zdW1tZXIgMjAyMCBhbmQgZWFybHktc3VtbWVyIDIwMjEuIAoKIyMjIyBQb3B1bGF0aW9uIHNpemUKKiAyMDIxIGVzdGltYXRlZCBwb3B1bGF0aW9uIHNpemUgaXMgYXBwcm94aW1hdGVseSAyOCBhZHVsdHMuIAoqIEFzIG9mIG1pZC1BdWd1c3QgMjAyMSwgZnJvZyBwb3B1bGF0aW9uIGV4dGVuZHMgZnJvbSBMb3dlciBQb29sIG91dGxldCB0byA3Mjk3My4gCiogNzI5NzMgKHVwcGVybW9zdCBwb25kKSB3YXMgY29sb25pemVkIGJ5IGFkdWx0cyBhbmQgbWV0YW1vcnBocyBpbiAyMDIwLiAKKiBBbGwgcmVwcm9kdWN0aW9uIGlzIG9jY3VycmluZyBpbiA3NDk3Ni4gCiogUG9wdWxhdGlvbiBzZWVtcyBsaWtlbHkgdG8gYmVjb21lIGZpcm1seSBlc3RhYmxpc2hlZCBpbiBuZXh0IGZldyB5ZWFycy4gCgohW10oLi4vLi4vb3V0L3Bsb3RzLzc0OTc2X21ybXJfcGxvdHMucG5nKXt3aWR0aD03NSV9CgoKIyMgUmVpbnRyb2R1Y2VkIHBvcHVsYXRpb25zCgoKCgoK